package shuzu

type pairs struct {
	x, y int
}

var dirs = []pairs{{0, 1}, {1, 0}, {0, -1}, {-1, 0}} // 定义一个方向盘，给出后续执行的方向

func GenerateMatrix(n int) [][]int {
	ans := make([][]int, n)
	x, y := 0, 0
	dirIndex := 0
	for i := 0; i < n; i++ {
		ans[i] = make([]int, n)
	}
	for i := 1; i <= n*n; i++ {
		ans[x][y] = i
		dir := dirs[dirIndex]
		//fmt.Println(x, y, i, ans, dirIndex, dir)
		if a, b := x+dir.x, y+dir.y; a >= n || b >= n || a < 0 || b < 0 || ans[a][b] > 0 {
			dirIndex = (dirIndex + 1) % 4
			dir = dirs[dirIndex]
		}
		x += dir.x
		y += dir.y
	}
	return ans
}

// 上面是变方向，下面是变边界

func GenerateMatrix2(n int) [][]int {
	return make([][]int, n)
}
